package UndoRedo;
import java.util.ArrayList;
import Builder.BrickSelectionManager;
import Connectivity.GlobalConnectivityManager;
import LDraw.Files.LDrawContainer;
import LDraw.Support.LDrawDirective;
import Window.MOCBuilder;
public class DirectiveAction implements IAction {
private ArrayList<Integer> indexList;
private ArrayList<LDrawContainer> parentList;
private ArrayList<LDrawDirective> directiveList;
private ArrayList<Boolean> flagList;
public DirectiveAction() {
indexList = new ArrayList<Integer>();
parentList = new ArrayList<LDrawContainer>();
directiveList = new ArrayList<LDrawDirective>();
flagList = new ArrayList<Boolean>();
}
private void add(LDrawDirective directive,boolean flag) {
indexList.add(directive.enclosingDirective()
.indexOfDirective(directive));
parentList.add(directive.enclosingDirective());
directiveList.add(directive);
flagList.add(flag);
}
public void addDirective(LDrawDirective directive) {
add(directive,true);
}
public void removeDirective(LDrawDirective directive) {
add(directive,false);
}
public void removeDirectives(ArrayList<LDrawDirective> directives) {
for (LDrawDirective directive : directives) {
add(directive,false);
}
}
@Override
public void undoAction() {
MOCBuilder builder = MOCBuilder.getInstance();
for (int i = 0; i < directiveList.size(); i++) {
if (flagList.get(i)) {
builder.removeDirectiveFromWorkingFile(directiveList.get(i));
} else {
builder.insertDirectiveToWorkingFile(indexList.get(i),
parentList.get(i), directiveList.get(i), true);
}
}
GlobalConnectivityManager.getInstance().updateMatrixAll();
BrickSelectionManager.getInstance()
.updateScreenProjectionVerticesMapAll();
}
@Override
public void redoAction() {
MOCBuilder builder = MOCBuilder.getInstance();
for (int i = 0; i < directiveList.size(); i++) {
if (flagList.get(i)) {
builder.insertDirectiveToWorkingFile(indexList.get(i),
parentList.get(i), directiveList.get(i), true);
} else {
builder.removeDirectiveFromWorkingFile(directiveList.get(i));
}
}
GlobalConnectivityManager.getInstance().updateMatrixAll();
BrickSelectionManager.getInstance()
.updateScreenProjectionVerticesMapAll();
}
}